import '../Demo6/lib/Animal.dart';

/**
 * Dart中的抽象类 多态 和接口
 * 
 * Dart中抽象类：Dart抽象类主要用于定义标准。子类可以继承抽象类，也可以实现抽象类接口
 * 1.抽象类通过abstract关键字来定义
 * 2.Dart中抽象方法不能用abstract声明，Dart中没有方法体的方法我们称为抽象方法
 * 3.如果子类继承抽象类必须得实现里面的抽象方法
 * 4.如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法
 * 5.抽象类不能被实例化，只有继承它的子类可以
 * extends抽象类和implements的区别：
 * 1.如果要复用抽象类里面的方法，并且要用抽象方法约束自类的话我们就用extends继承抽象类
 * 2.如果只是把抽象类当做标准的话我们就用implements实现抽象类
 * 
 * 案列：定义一个Animal类要求它的子类必须包含eat方法
 * 
 * 
 * 
 */

//抽象类Animal
abstract class Animal {

eat(); //抽象方法 Dart中没有方法体的方法我们称为抽象方法

run();//抽象方法

printInfo(){

print("我是一个抽象类里面的普通方法");

}

  
}

//继承抽象类 必须实现抽象方法
class Dog extends Animal{

  @override
  eat() {

  print("小狗在吃骨头");

  }
  
  @override
  run() {
    // TODO: implement run
  print("小狗在跑");

  }


}

void main() {
  
Dog d=new Dog();

d.eat();//小狗在吃骨头

d.run();//小狗在跑

// Animal animal=new Animal(); //抽象类没办法直接被实例化，只有继承子类才会被实例化

d.printInfo();//我是一个抽象类里面的普通方法

}